// 首先确定蛇头位置
// 然后正常移动, 但是移动的步骤按照上面的指令执行,  // 首先是方向, 每次遇到g时, 就尝试向方向移动一步
// 如果蛇头在边界, 就需要考虑, 移动是否出界, 出界就结束
// 如果移动方向有食物, 那么需要吞噬食物
// 如果移动方向有蛇身, 判断移动后, 蛇头和蛇身是否重叠, 如果重叠, 就结束
// 否则按照步骤走完, 再输出蛇长
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let stepArr = [];
let m, n; // m表示行, n表示列
let initArr = [];
rl.on("line", (line) => {
    if (stepArr.length === 0) {
        stepArr = line.trim().split(" ")
    } else if (m === undefined) {
        [m, n] = line.trim().split(" ").map(Number)
    } else {
        initArr.push(line.trim().split(" "))
        if (initArr.length === m) {
            console.log(getResult(stepArr, m, n, initArr))

            // clear
            stepArr.length = 0
            m = n = undefined
            initArr.length = 0
        }

    }

})

function getResult(stepArr, m, n, initArr) {
    // 蛇头
    let snack = []
    outer:for (let i = 0; i < m ; i++) {
        for (let j = 0; j < n; j++) {
            if(initArr[i][j] === "H") {
            snack.push([i, j])
                break outer
            }
        }
    }
    //
    let directionObj = {
        "L": [0, -1],
        "R": [0, 1],
        "U": [-1, 0],
        "D": [1, 0],
    }
    let direction = "L"

    outer:for (const char of stepArr) {
        if(char !== "G") {
            direction = char
        } else {
            // 边界处理
            let [x, y] = snack[0]
            if(x === 0) {
                if(direction === "U") break
            } else if(x === m - 1) {
                if(direction === "D") break
            } else if (y === 0) {
                if(direction === "L") break
            } else if (y === n - 1) {
                if(direction === "R") break
            }

            // 自碰撞处理
            let newX = x + directionObj[direction][0]
            let newY = y + directionObj[direction][1]
            for (let i = 0; i < snack.length - 1; i++) {
                let node = snack[i]
                if(node[0] === newX && node[1] === newY) {
                    break outer
                }
            }

            // 吃食物
            if(initArr[newX][newY] === "F") {
                snack.unshift([newX, newY])
                continue
            }

            //移动
            if(initArr[newX][newY] === "E") {
                snack.pop()
                snack.unshift([newX, newY])
            }
        }
    }

    return snack.length

}